perm filename MAP[E,ALS] blob
sn#169591 filedate 1975-07-23 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 MAP
C00009 ENDMK
C⊗;
;MAP
MAPMES: ASCIZ /FSUSE FSFREE FSTOT DIR PAGE ATT FSBEG
/
MAPHED: ASCIZ /
0 1 2 3 4 5 6 7
/
DSKMAP←←6
IMPURE
MAPILE: SIXBIT /ETVMAP/
SIXBIT /001 /
0
SIXBIT / EALS/
PURE
MAPEXT: SIXBIT /001 /
MAPPPN: SIXBIT / EALS/
MAPCR: TYPCHR "
" ;New line needed
MOVEI D,100 ;Allow 64 on a line
ADDI E,100
TRNE E,777
JRST MAPCR2
TYPCHR "
"
OUT DSKMAP,[-200,,CMDBUF-1↔0]
SKIPA
JRST MAPT2
MOVE A,[440700,,CMDBUF] ;Use this buffer to accumulate text
SETZM CMDBUF
MOVE T,[CMDBUF,,CMDBUF+1]
BLT T,CMDBUF+177 ;Clear the buffer
MOVE A,[POINT 7,CMDBUF]
TYPOCT E
TYPCHR " " ;A TAB
POPJ P,
MAPT2: MOVE T,MAPILE+1 ;If file exists create a new name
ADD T,[1,,0]
MOVEM T,MAPILE+1
CLOSE DSKMAP
JRST MAPIT ;Try again
;Code to make a map of free storage
MAP:
MOVEM 17,SAVEAC+17
MOVEI 17,SAVEAC
BLT 17,SAVEAC+16
MOVE P,SAVEAC+17 ;No reason to make another push-down list
MOVE T,MAPEXT ;Start with EXT of 001
MOVEM T,MAPILE+1
MAPIT: OPEN DSKMAP,[17↔'DSK '↔0]
PUSHJ P,TELLZ
MOVE T,MAPPPN
MOVEM T,MAPILE+3 ;This must be reset
LOOKUP DSKMAP,MAPILE
JRST .+2 ;Assume that it does not exist
JRST MAPT2 ;This name is already used
ENTER DSKMAP,MAPILE
JRST MAPT2
SETZM CMDBUF
MOVE T,[CMDBUF,,CMDBUF+1]
BLT T,CMDBUF+177 ;Clear the buffer
MOVE A,[440700,,CMDBUF] ;Use this buffer to accumulate text
PUSHJ P,FILEID ;Get file identification data
MOVE B,[POINT 7,MAPMES]
PUSHJ P,CHTEXT ;Print labels
MOVE T,FSUSE ;Cells occupied
PUSHJ P, NUMSTR
MOVEI E,11
IDPB E,A
MOVE T,FSFREE ;Cells free
PUSHJ P, NUMSTR
IDPB E,A
MOVE T,FSMAX
SUB T,FSMIN
PUSHJ P, NUMSTR ;Total number of cells in free storage
IDPB E,A
MOVE T,DIR
SUB T,FSMIN
PUSHJ P,NUMSTR ;Relative start of Directory cells
IDPB E,A
MOVE T,PAGE
SUB T,FSMIN
PUSHJ P,NUMSTR ;Relative start of page cells
IDPB E,A
MOVE T,ATTBUF
SUB T,FSMIN
PUSHJ P,NUMSTR ;Relative start of ATTBUF
IDPB E,A
MOVE T,FSBEG
SUB T,FSMIN
PUSHJ P, NUMSTR ;Relative start of FRFREE
MOVE B,[POINT 7,MAPHED]
PUSHJ P, CHTEXT
MOVEM A,TYOPNT ;Prime for TYPCHR
MOVEI B,FSMIN ;Start at beginning of free storage
MOVEI D,100 ;Allow 64 cells per line in map
MOVEI E,0 ;Used for cell count
TYPDEC E
TYPCHR " " ;A TAB
MAP1: HRRZ T,(B) ;Get the number of words for this line
MOVE TT,B
ADD TT,T ;This will be the new B
CAME T,-1(TT) ;Check the two end counts
JRST MAP3 ;We're in trouble
MAP2: HLRZ C,(B) ;Get identifying info
CAIN C,1 ;Is it a directory line?
JRST [TYPCHR "D"↔SOJA T,MAP4] ;Yes
CAIN C,2 ;Or maybe text?
JRST [TYPCHR "T"↔SOJA T,MAP4] ;Yes
CAIN C,777777 ;Surely must be empty then?
JRST [TYPCHR "E"↔SOJA T,MAP6] ;Yes
;Something is wrong, try to fix
MAP3: MOVE G,B
MAP3A: TYPCHR "?"
SOSG D
PUSHJ P,MAPCR
ADDI G,1
CAML G,FSMAX
JRST MAP9 ;We are at the end of free storage
HLRZ C,(G)
CAIE C,1
CAIN C,2
JRST MAP3B ;Maybe this is it
CAIE C,777777
JRST MAP3A ;Still may be it
MAP3B: HRRZ T,(G)
MOVE TT,G
ADD TT,T
CAME T,-1(TT)
JRST MAP3A ;Still no good
MOVE B,G ;We are back in step
JRST MAP1
MAP3: ;We're in trouble, find out why
MAP4: SOSG D
PUSHJ P,MAPCR
TYPCHR "+"
MAP5: SOJG T,MAP4
JRST MAP8
MAP6: SOSG D
PUSHJ P,MAPCR
TYPCHR " "
MAP7: SOJG T,MAP6
MAP8: SOSG D
PUSHJ P,MAPCR
MOVE B,TT ;Get ready for the next line
CAMGE B,FSMAX ;Are we through?
JRST MAP1 ;No
MAP9: OUT DSKMAP,[-200,,CMDBUF-1↔0]
SKIPA
JFCL
CLOSE DSKMAP,
RELEAS DSKMAP,
MOVSI 17,SAVEAC
BLT 17,17
POPJ P,
MAPT2: MOVE T,MAPILE+1 ;If file is busy create a new one
ADD T,[1,,0]
MOVEM T,MAPILE+1
CLOSE DSKMAP,
JRST MAPIT ;Try again